查看原文
其他

CAP曲线了解一下?

66号学苑 2022-09-08

The following article is from 风控建模 Author Monica

在上篇文章中我们学习了怎么根据分类算法的分类结果输出来绘制ROC图并计算AUC值。今天,我们将介绍另一种曲线,也就是CAP曲线的绘制方法。


什么是CAP曲线


CAP(Cumulative Accuracy profile,累积精度分布)曲线是用于衡量评分算法的累积客户百分比下的累积违约客户百分比的一种曲线。它的横轴 x 表示的是累积客户百分比,纵轴 y 表示的是累计违约客户百分比。CAP曲线还可以用于计算违约概率。


一个典型的CAP曲线图长成这样:

CAP曲线图中红色的代表理想评分算法的输出,它能将所有违约的客户都排到最前面,排在后面的都是好客户。黄色的虚线代表的是随机输出算法的结果,它是没有分辨力的,所以好坏客户参半。而蓝色折线代表的是一般算法的输出,它介于理想算法和随机输出之间。


对于评分算法来说,曲线越“靠近”理想线,其性能越好。和ROC曲线一样,可以用曲线下面积来定量地衡量算法的优劣。


怎么画CAP曲线图


相信大家对CAP曲线是什么已有了一些了解,现在开始关心怎么才能画出CAP曲线的问题。


画图首先要一些数据,假设某个人写了个评分算法,并用他的算法对300个客户进行评分测试,测试结果如下表:


 

评分算法将最有可能违约的客户排在最前面,也就是分数最高。

根据CAP曲线的定义,利用以上数据可以计算出相应的比率数组。


import csv

##读取数据文件
csv_reader = csv.reader(open('data.csv', encoding='utf-8'))

##读取各分数等级的数据到内存。
data = [ [r[0],int(r[2]),int(r[3])] for r in csv_reader ]

##违约客户总数,客户总数
P,T=sum([r[0] for r in data]),sum([r[1] for r in data])

x = [0] #累积违约客户比
y = [0] #累计客户比
Pi = 0 ##累积违约客户数
Ti = 0 ##累计客户数
for row in data:
##    更新计数
    Pi += row[0]
    Ti += row[1]
##    计算比例并添加到坐标数组
    y.append(round(Pi/P,3))
    x.append(round(Ti/T,3))


计算出的结果如下表。



接下来的绘图代码很简单。


plt.figure()
plt.plot(x,y,'r+-',label='CAP')
plt.plot(x,x,'y-.',label='随机')
plt.plot([0,P/T,1],[0,1,1],'b--',label='理想') ##绘制理想CAP曲线,它只有3个点。##P/T 表示所有违约客户数占总客户数的比。
plt.yticks(np.arange(0,1,0.1))
plt.xticks(np.arange(0,1,0.1))
plt.xlabel('累计客户比')
plt.ylabel('累计违约客户比')
plt.axis([0, 1, 0, 1])
plt.legend()
plt.show()


结果如图:


来源|风控建模

作者|Monica


更多精彩,戳这里

|这是一份可以让你很牛很牛的风控技能包|

|银行智能反欺诈风险预测模型研究|

|树模型的共线性问题|

|在线支付之风控系统架构选型|

|我来拯救正在为变量降维而烦恼的你|


阅读原文,即可报名



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存